#ifndef PRIORITY_QUEUE_H
#define PRIORITY_QUEUE_H

#include <stdlib.h>
typedef int itemType;
typedef int queueSize;
typedef int priority;
struct Queue{
	itemType * pItems;
	queueSize capacity; /*the maximum size of queue */
	queueSize readIndex; 
	queueSize usedSize; /*should be less than capacity */
	queueSize hightestAvailable; /* highest priority queue that has item */
	queueSize lowestAvailable; /* highest priority queue that has item */
};

/**
 * numberOfPriorities: number of queues the PQ consist
 * return: A pointer to a Queue array, or -1 for error.
 */
Queue * createPriorityQueues(int numberOfPriorities);

/**
 * delete a PQ and free the memory.
 */
void * deleteQueue(Queue * pQ, priority priorityQueueSize)

int pushHeadOfQueue(itemType item, priority prio);

int pushTailOfQueue(itemType item, priority prio);

Item getHighestItem(Queue* pQ);

Item getLowestItem(Queue* pQ);

Item popHighestItem(Queue* pQ);

Item popLowestItem(Queue* pQ);
#endif /* PRIORITY_QUEUE_H */